﻿using System.ComponentModel;
using System.Windows.Forms;

namespace WinForms.Framework.Controls
{
    /// <summary>
    /// System.Windows.Forms.ComboBox を継承した独自のコンボボックスコントロールです。
    /// </summary>
    public class ComboBoxEX : ComboBox
    {
        #region Property
        /// <summary>
        /// この System.Windows.Forms.ListControl に表示するプロパティを取得または設定します。
        /// </summary>
        /// <remarks>
        /// 基底クラスの DisplayMember プロパティに初期値を設定しました。
        /// </remarks>
        [DefaultValue("Key")]
        public new string DisplayMember
        {
            get { return base.DisplayMember; }
            set { base.DisplayMember = value; }
        }

        /// <summary>
        /// System.Windows.Forms.ListControl 内の項目の実際の値として使用するプロパティを取得または設定します。
        /// </summary>
        /// <remarks>
        /// 基底クラスの ValueMember プロパティに初期値を設定しました。
        /// </remarks>
        [DefaultValue("Value")]
        public new string ValueMember
        {
            get { return base.ValueMember; }
            set { base.ValueMember = value; }
        }

        /// <summary>
        /// キー押下、およびマウスホイールによる値の変更を禁止するかどうかを取得または設定します。
        /// </summary>
        [Category("Framework")]
        [Description("キー押下、およびマウスホイールによる値の変更を禁止するかどうかを取得または設定します。")]
        [DefaultValue(false)]
        public bool DisabledKeyDownAndWheel { get; set; }
        #endregion

        #region Constructor
        /// <summary>
        /// ComboBoxEX クラスの新しいインスタンスを初期化します。
        /// </summary>
        public ComboBoxEX()
        {
            DisplayMember = "Key";
            ValueMember = "Value";
        }
        #endregion

        #region Event
        /// <summary>
        /// OnKeyDown
        /// </summary>
        /// <param name="e">イベントデータ</param>
        protected override void OnKeyDown(KeyEventArgs e)
        {
            // キー押下、およびマウスホイールによる値の変更を禁止されている場合は無効化する
            base.OnKeyDown(e);
            e.Handled = DisabledKeyDownAndWheel;
        }

        /// <summary>
        /// OnMouseWheel
        /// </summary>
        /// <param name="e">イベントデータ</param>
        protected override void OnMouseWheel(MouseEventArgs e)
        {
            // キー押下、およびマウスホイールによる値の変更を禁止されている場合は無効化する
            base.OnMouseWheel(e);
            ((HandledMouseEventArgs)e).Handled = DisabledKeyDownAndWheel;
        }
        #endregion
    }
}